{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Auditory Sound Processing - Part II: FFTs <img src='data/images/logo.png' width=50 align='left'> \n",
    "\n",
    "author: Thomas Haslwanter\\\n",
    "date: June-2020"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [],
   "source": [
    "# Standard packages\n",
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import os\n",
    "\n",
    "# Special imports\n",
    "from scipy.io.wavfile import read"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Fourier Transform & Power spectrum"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "To see the frequency content of this sound, we can transfer the signal from the time into the frequency domain"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "<img src='data/images/Idea_FourierTransform.png' style=\"width: 300px;\"/>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "For *n* discrete datapoints $f_n$, the Fourier Transformation is given by:\n",
    "\n",
    "\\begin{equation}\n",
    "  {f_\\tau } = \\frac{1}{N}\\sum\\limits_{n = 0}^{N - 1} {{F_n}\\,{e^{2\\pi i\\,\\frac{n \\cdot \\tau }{N}}}} \\hspace{5 mm} with \\; \\tau=1,...,N\n",
    "\\end{equation}\n",
    "\n",
    "The coefficients $F_n$ can be obtained by the back-transformation:\n",
    "\n",
    "\\begin{equation}\n",
    "  {F_n} = \\sum\\limits_{\\tau  = 0}^{N - 1} {{f_\\tau }\\,{e^{ - 2\\pi i\\,\\frac{{n \\cdot \\tau }}{N}}}}  \\hspace{5 mm} with \\enspace n=1,...,N\n",
    "\\end{equation}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "audioDir = r'data\\sounds'\n",
    "soundFile = os.path.join(audioDir, 'a1.wav')\n",
    "rate, data = read(soundFile)\n",
    "\n",
    "nData = len(data)\n",
    "duration = nData/rate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.0, 5512.296368807949)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# \n",
    "# Fourier Transformation of the data\n",
    "# Here we use the function \"fft\" from the package \"np.fft\"\n",
    "fftData = np.fft.fft(data)\n",
    "\n",
    "# The Powerspectrum only contains the magnitude of the Fourier components\n",
    "# Note: The conversion to real is only to eliminate an annoying Warning message\n",
    "Pxx = np.real(fftData*fftData.conj()) / nData\n",
    "freq = np.arange(nData)/duration\n",
    "\n",
    "# Plot the data\n",
    "plt.semilogy(freq,Pxx)\n",
    "\n",
    "# Format the plot\n",
    "plt.xlabel('Frequency [Hz]')\n",
    "plt.ylabel('Power')\n",
    "Nyquist = max(freq)/2\n",
    "plt.xlim(0, Nyquist)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "slideshow": {
     "slide_type": "skip"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "numpy.float64"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(Pxx[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Interpretation of the Fourier Coefficients\n",
    "\n",
    "Each Fourier coefficient is a complex number, with a magnitude and a phase.\n",
    "\n",
    "<img src=\"data/images/ComplexNumber.jpg\" width=300>\n",
    "\n",
    "The magnitude gives the amplitude of the corresponding Fourier component; and the phase the phase shift, compared to a pure cosine wave."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "### Symmetry of Powerspectrum\n",
    "For real-valued inputs f(t) we have the following relation:\n",
    "\n",
    "$F(ω)=F(−ω)^∗$\n",
    "\n",
    "As a consequence, the powerspectrum is symmetrical!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Power')"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.semilogy(freq, Pxx)\n",
    "plt.xlabel('Frequency [Hz]')\n",
    "plt.ylabel('Power')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(-13607461+0j)\n",
      "[-167240.92-894878.j   -837190.94+290807.52j]\n",
      "[-167240.92+894878.j   -837190.94-290807.52j]\n"
     ]
    }
   ],
   "source": [
    "%precision 2\n",
    "print(fftData[0])\n",
    "print(fftData[1:3])  # second and third Fourier coefficients\n",
    "print(fftData[:-3:-1]) # last two Fourier coefficients, with sequence reversed!\n",
    "# Note that the last two components are the complex conjugate of the second and third component.\n",
    "# The first component is real, and proportional to the offset."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "### Frequency of the Fourier Coefficients\n",
    "* The power in the *zero frequency* is proportional to the offset of the signal.\n",
    "* The lowest frequency is determined by the length of the recorded signal: $f_1 =\\frac{1}{\\Delta t * N} = \\frac{1}{Duration}$.\n",
    "* The highest frequency is determined by the sample rate: $f_N = \\frac{1}{\\Delta t} = rate$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Further links to sound processing"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "* [FFMPEG](http://www.ffmpeg.org/) A complete, cross-platform solution to record, convert and stream audio and video. \n",
    "* [scikit-sound](http://work.thaslwanter.at/sksound/html/sounds.html) Class for reading/writing/playing sounds. Uses FFMPEG.\n",
    "* [Pydub](http://pydub.com/) Lets you manipulate audio with a simple and easy high level interface. Requires FFMPEG."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "skip"
    }
   },
   "source": [
    "[9_SoundProc_Basics](9_SoundProc_Basics.ipynb)<img src=\"data\\images\\Forward_Backward.png\" align='middle'>[9_Soundproc_TimeDependence](9_Soundproc_TimeDependence.ipynb)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "slideshow": {
     "slide_type": "skip"
    }
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "celltoolbar": "Slideshow",
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  },
  "livereveal": {
   "scroll": true
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
